home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / raytrace / rayshade / graphtal.lzh / Graphtal.Amiga / yyerror.C < prev    next >
C/C++ Source or Header  |  1992-11-17  |  1KB  |  62 lines

  1. /*
  2.  * yyerror.C - error function for parser.
  3.  *
  4.  * Copyright (C) 1992, Christoph Streit (streit@iam.unibe.ch)
  5.  *                     University of Berne, Switzerland
  6.  * All rights reserved.
  7.  *
  8.  * This software may be freely copied, modified, and redistributed
  9.  * provided that this copyright notice is preserved on all copies.
  10.  *
  11.  * You may not distribute this software, in whole or in part, as part of
  12.  * any commercial product without the express consent of the authors.
  13.  *
  14.  * There is no warranty or other guarantee of fitness of this software
  15.  * for any purpose.  It is provided solely "as is".
  16.  *
  17.  */
  18.  
  19. #include <stdlib.h>
  20. #include <stream.h>
  21. #include "yyerror.h"
  22.  
  23. rcString currentFilename;
  24.  
  25. int yyerror(const char* msg)
  26. {
  27.   extern int yynerrs;    
  28.   extern int lineno;   // current line number
  29.   extern char* yytext;          
  30.   char colon = 0;
  31.  
  32.   cerr << "[Error " <<  yynerrs << "] ";
  33.   if (!currentFilename.empty())
  34.     cerr << "File \'" << currentFilename << "\', ";
  35.     
  36.   if (lineno > 0) {
  37.     cerr << "line " << 1+lineno-(*yytext == '\n' || *yytext);
  38.     colon = 1;
  39.   }
  40.   if (*yytext)
  41.   {
  42.     int i;
  43.     for (i = 0; i < 20; ++i)
  44.       if (!yytext[i] || yytext[i] == '\n')
  45.     break;
  46.     if (i > 0)
  47.     {
  48.       if (colon) cerr << " ";
  49.       cerr << "near \"" << form("%.*s\" ", i, yytext);
  50.       colon = 1;
  51.     }
  52.   }
  53.   if (colon)
  54.     cerr << ": ";
  55.   cerr << msg << "!\n";
  56.   cerr.flush();
  57.  
  58.   exit(1);
  59.  
  60.   return 1;
  61. }
  62.